home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 2864 < prev    next >
Encoding:
Text File  |  1996-08-05  |  1.8 KB  |  63 lines

  1. Newsgroups: comp.lang.c
  2. Path: in2.uu.net!world!mv!usenet
  3. From: ENGR@GSSI.MV.COM (Michael Furman)
  4. Subject: Re: quick decision: is n a power of 2?
  5. Message-ID: <DLoyKB.C8t@mv.mv.com>
  6. Mime-Version: 1.0
  7. Organization: GSSI
  8. Date: Wed, 24 Jan 1996 15:19:23 GMT
  9. References: <Pine.OSF.3.91.960119114608.18779E-100000@io.UWinnipeg.ca>
  10. X-Newsreader: WinVN 0.93.10
  11. X-Nntp-Posting-Host: gssi.mv.com
  12.  
  13. In article <Pine.OSF.3.91.960119114608.18779E-100000@io.UWinnipeg.ca>, 
  14. wsimpson@uwinnipeg.ca says...
  15. >
  16. >Is there a fast way to decide whether a number n is a power of 2?
  17. >
  18. >In my problem
  19. >if ((high-low+1) is a power of 2)
  20. >        {
  21. >        do one thing
  22. >        }
  23. >else
  24. >        {
  25. >        do another
  26. >        }
  27. >e.g. low=0, high=7: 7-0+1 is a power of 2.
  28. >
  29. >The only thing I have thought of is that if n is power of 2
  30. >log(n)/log(2) is an integer
  31. >BUT this is going to be a SLOW computation.  Needs to be fast.
  32. >
  33. >Since I am dealing with unsigned long ints, I guess I can just store all
  34. >31 powers of 2 in a table and compare to n.  Though I don't know a fast
  35. >algorithm to compare a number to 31 numbers in an array.
  36. >
  37. >Perhaps there is a tricky nonportable way to see if I have power-of-2 by 
  38. >looking at bits?  (That is fine for this application)
  39.  
  40. Just write:
  41.    if((n & (n - 1)) == 0)
  42.      ......................
  43.  
  44. And I believe in case of unsigned n it is portable (but sould be checked 
  45. carefully with standard).
  46.  
  47.  
  48.  
  49. >
  50. >Thanks very much for any help.
  51. >
  52. >Bill Simpson
  53.  
  54. -- 
  55. <<<<<<<< This is a copy of post to the newsgroup >>>>>>>>
  56. ---------------------------------------------------------------
  57. Michael Furman,                       (603)893-1109
  58. Geophysical Survey Systems, Inc.  fax:(603)889-3984
  59. 13 Klein Drive - P.O. Box 97          engr@gssi.mv.com 
  60. North Salem, NH 03073-0097            71543.1334@compuserve.com
  61. ---------------------------------------------------------------
  62.  
  63.